/*
============================================================================
 Name        : dd_stack.h
 Author      : Jian (raphyer@hotmail.com)
 Version     :
 Copyright   : GPL
 Description : dd_stack.h - header file
============================================================================
*/

#ifndef DD_STACK_H
#define DD_STACK_H

#include "dd_define.h"

__DD_BEGIN_DECLS

/* 
* The Stack structure Implement 
*/
typedef struct __dd_stack dd_stack;

struct __dd_stack {
	void**   data ;
	int   top ;
	DD_UINT  size ;
	DD_UINT  granularity ;
};


dd_stack* dd_stack_create(DD_UINT granularity) ;

void dd_stack_destroy(dd_stack* stack) ;

DD_UINT dd_stack_count(const dd_stack* stack) ;

void dd_stack_push(dd_stack* stack, void* data) ;

void* dd_stack_pop(dd_stack* stack) ;

void* dd_stack_top(const dd_stack* stack) ;

void dd_stack_popn(dd_stack* stack, int n) ;

/* 0 is the top data in the stack, the below top is 1, 2, 3 ... */
void* dd_stack_datan(const dd_stack* stack, int index) ; 

void dd_stack_reset(dd_stack* stack) ;

DD_BOOL dd_stack_own_data(dd_stack* stack, void* data) ;


#ifdef __DD_TEST

DD_BOOL dd_stack_test() ;

#endif
 

__DD_END_DECLS

#endif	/* DD_STACK_H */

/* End of File */
